
package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOProveedorArticulo;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.service.IServicioProveedorArticulo;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.Proveedor;
import pe.com.cotelasa.scp.entidad.ProveedorArticulo;

/**
 *
 * @author usuario
 */

@Service
public class ServicioProveedorArticuloImpl implements IServicioProveedorArticulo, Serializable{
    
    @Inject
    private IDAOProveedorArticulo daoProveedorArticulo;
    
    @Override
    public ProveedorArticulo conseguirProveedorArticuloPorId(ProveedorArticulo proveedorArticulo) {
        try {
            return daoProveedorArticulo.obtenerProveedorArticuloPorId(proveedorArticulo);
        } catch (DAOException ex) {
            Logger.getLogger(ServicioIgvImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    @Override
    public Collection<ProveedorArticulo> listarArticulosPorProveedor(ProveedorArticulo proveedorArticulo) throws ServiceException{
        try {
            return daoProveedorArticulo.listarArticulosPorProveedor(proveedorArticulo);
        } catch (DAOException ex) {
            Logger.getLogger(ServicioProveedorArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    @Override
    public ResultadoServicio guardarProveedorArticulo(ProveedorArticulo proveedor) throws ServiceException{
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
          
            proveedor.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            daoProveedorArticulo.insertar(proveedor);
            
        } catch (DAOException ex) {            
            resultadoServicio.setEstadoResultado(ESTADO_RESULTADO.FALLIDO);
            resultadoServicio.setMensaje("Ocurrio un problema al tratar de guardar el proveedor.");
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }
    
    @Override
    public ResultadoServicio actualizarProveedorArticulo(ProveedorArticulo proveedor) throws ServiceException{
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoProveedorArticulo.actualizar(proveedor);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }
    
    @Override
    public Collection<ProveedorArticulo> listarPorProveedor(ProveedorArticulo proveedorArticulo) throws ServiceException{
        try {
            return daoProveedorArticulo.listarPorProveedor(proveedorArticulo);
        } catch (DAOException ex) {
            Logger.getLogger(ServicioProveedorArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    @Override
    public Collection<Proveedor> listarProveedoresDistintos() throws ServiceException {
        try {
            Collection<Proveedor> lista = new ArrayList<Proveedor>();
            
            for(Object obj: daoProveedorArticulo.listarProveedoresDistintos()){
                Proveedor prove = (Proveedor) obj;
                System.out.println("---------------  "+prove.getNombreComercial());
                lista.add(prove);
            }        
            return lista;
        } catch (DAOException ex) {
            Logger.getLogger(ServicioProveedorArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
}
